package com.wanxi.dangdang.service;

import com.github.pagehelper.PageInfo;
import com.wanxi.dangdang.model.pojo.Scenic;
import com.wanxi.dangdang.model.vo.*;
import org.springframework.data.domain.Page;
import org.springframework.data.elasticsearch.core.SearchHits;

import java.util.List;


public interface ScenicService {
    //   通过景区id获取景区信息
    ScenicFindByIdVO findById(Long id);

    //分页查询找到所有景区信息
    PageInfo<ScenicPageVO> findPage(PageScenicDimVO pageScenicDimVO, Integer pageNum, Integer pageSize);

    //   新增一个景区实体类对象
    void add(AddScenicVO addScenicVO);

    //   通过id找到景区
    AddScenicVO backFindById(Long scenicId);

    //   管理员对景区的单个删除
    void delete(Long scenicId);

    //   管理员修改景区的上下架状态
    void backUpdateStatus(Long scenicId);

    //该方法用于模糊查询以及分页以及查询所有景点
    PageInfo<Scenic> backFindPage(FindPageScenicVO findPageScenicVO);

    //   通过景区表找到销量前五城市
    List<HighSalesCityVO> findHighSalesCityBySales();

    //   通过景区表查询销量前五城市中的景区数量
    List<SumScenicVO> findHighSumScienceByCity();

    //   通过分销商id找到分销商店铺景区信息
    PageInfo<List<BUserScenicVO>> findByDistributorId(PageScenicDimVO pageScenicDimVO, Integer pageNum, Integer pageSize);

    //   更改分销商店铺中的景区状态
    void updateStatus(Long distributorId, Long scenicId);

    //   分销商对自己的店铺的景区的移除操作
    void deleteScenicByBUser(Long distributorId, Long scenicId);

    //   添加景点到分销商的店铺
    String saveToMyStore(Long distributorId, Long scenicId);

    //   首页平台推荐佣金最高前5
    PageInfo<List<ScenicPageVO>> PlatformRecommend();

    //增加销量
    Integer increaseSale(Long scenicId, Integer num);


    //es
    Page<Scenic> findHomePage(Integer pageNum, Integer pageSize);

    SearchHits<Scenic> findByNameHighLight(String keyword, Integer pageNum, Integer pageSize);

    void backUpdate(AddScenicVO addScenicVO, Long id);

    String saveAll();

    //找库存
    Integer findRepertory(Long scenicId, Long date);

    /**
     * @Author:YanZhengYi
     * @Description: 此方法为修改库存
     * @Params: scenicId 景区ID,date  时间戳，number  出行人数 添加库存则正数，删除库存则负数
     * @Date: 15:04 2021/9/4
     * @return
     */
   boolean addRepertory(Long scenicId, Long date, Integer number);
   boolean reduceRepertory(Long scenicId, Long date, Integer number);
   Double findCommissionRateByScenicId(Long id);

    String findRepetitionStore(Long id,Long scenicId);
}
